Curl 命令最常见使用方式及案例
0. 引言
排查网站故障时,浏览器开发者工具很好用,但脚本调 API、监控服务状态、快速验证接口响应时,你需要一个命令行 HTTP 客户端——这就是 Curl。它模拟客户端请求,遵循 HTTP/HTTPS 协议,是运维与开发排查问题的"瑞士军刀"。本章从网站服务分析场景切入,梳理 Curl 最常用的参数与案例:状态码判断、通信过程查看、Referer 防盗链、IPv6 检测、代理访问、断点续传与各类 HTTP 方法。
1. 网站排查场景:Curl 的用武之地
部署或变更完一个站点后,排查"打不开"问题的标准路径是自下而上:
图表渲染中…
- 进程层:
ps查看进程是否存在、是否 running、CPU 占用是否正常,配合日志查错误; - 网络层:
ping通不通、TCP 连接是否建立(可配合 telnet/tcpdump 抓包); - 应用层:用 Curl 模拟 HTTP 请求,判断服务端返回的头信息与 body 是否符合预期。
2. 基本用法与状态码判断
2.1 常用参数
| 参数 | 作用 |
|---|---|
| 无参数 | 默认输出响应 body |
-i | 输出响应头 + body |
-I | 只输出响应头(HEAD 请求) |
-o | 输出到文件,如 -o output.txt |
-v | 打印完整通信过程(请求头、响应头、body) |
bash
curl baidu.com # 返回 body(HTML)
curl -I baidu.com # 只返回响应头
curl -v https://example.com # 查看完整通信过程2.2 状态码速查
| 区间 | 含义 | 常见码 |
|---|---|---|
| 1xx | 信息响应,未完成完整请求 | 100 Continue |
| 2xx | 成功 | 200 OK |
| 3xx | 重定向 | 301/302 |
| 4xx | 客户端错误 | 400、403(受限)、404(未找到)、499(客户端断开) |
| 5xx | 服务端错误 | 500(程序问题)、502、503 |
通过状态码可快速定位方向:403 看权限、404 看路径与防盗链规则、5xx 查服务端程序日志。
3. 实战案例
3.1 防盗链排查:Referer 头
Nginx 配置了"必须携带 Referer 才能下载"的规则时,直接请求返回 404:
bash
# 不带 Referer → 404
curl -I <下载链接>
# 携带 Referer → 200
curl -I -e "https://example.com" <下载链接>-e/--referer 指定请求来源地址,匹配服务端防盗链规则后即可正常访问。
3.2 自定义请求头
HTTP 请求头可以被用户自定义或改写:
bash
# 指定浏览器类型
curl --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X)" <URL>
# 添加自定义头(模拟 JSON 接口)
curl -H "Content-Type: application/json" -X POST -d '{"name":"test"}' <URL>3.3 HTTPS 与自定义证书
- 公共证书站点:直接访问,无需本地密钥;
- 自建证书站点:需要把客户端密钥放到本地,用
-E指定:
bash
curl -E /path/to/client.pem https://self-signed.example.com3.4 IPv6 站点检测
本地有 IPv6 地址且服务端支持 IPv6 时,可用 -6 强制 IPv6 请求,--resolve 手动指定域名解析结果:
bash
curl -6 -vo /dev/null \
--resolve "static.meituan.net:80:[240e:ff:e02c:1:21::]" \
"http://static.meituan.net/path/app.js"| 参数 | 作用 |
|---|---|
-6 | 发起 IPv6 请求 |
-v | 显示通信过程 |
-o /dev/null | body 丢弃,只关注响应头 |
--resolve | 手动指定域名→IP 解析 |
4. 功能性使用
4.1 代理访问
bash
curl -x http://200.200.200.200:8080 https://example.com-x 指定代理地址,请求经代理转发,用于测试代理链路或访问受限资源。
4.2 上传与下载
bash
# FTP 下载
curl -u user:pass ftp://ftp.example.com/file.zip
# 断点续传:-C 从上次中断位置继续
curl -C - -o file.zip https://example.com/big.zip断点续传原理:客户端记录已下载字节索引,网络抖动后重连,基于原有断点继续下载,无需从头再来——大文件下载的必备选项。
5. HTTP 请求方法
默认 Curl 使用 GET,通过 -X 指定方法、-d 携带数据:
bash
# GET(默认)
curl https://api.example.com/users
# POST:提交参数
curl -X POST -d "arg1=value1&arg2=value2" https://api.example.com/submit
# PUT:更新资源
curl -X PUT -d "data" https://api.example.com/users/1
# DELETE:删除资源
curl -X DELETE https://api.example.com/users/1
# OPTIONS:探测支持的请求方法
curl -X OPTIONS https://api.example.com/users6. 小结
- 排查思路:进程 → 网络 → 应用层,Curl 是应用层验证的核心工具;
- 参数速记:
-I看头、-v看全过程、-o存文件、-e带 Referer、-H自定义头、-E客户端证书、-6 --resolve测 IPv6; - 功能场景:
-x代理、-C -断点续传、-X+-d组合覆盖全部 HTTP 方法; - 状态码:200 正常、3xx 重定向、4xx 客户端问题、5xx 服务端问题,是故障定位的第一信号。
下一章讲解 Shell 如何实现系统初始化——用脚本自动化完成新机器的环境准备。